package com.molin.edu.info.manager.entry;

import com.molin.edu.info.manager.controller.OldStudentController;
import com.molin.edu.info.manager.controller.StudentController;

import java.util.Scanner;

public class InfoManagerEntry {
    public static void main(String[] args) {
        primaryMenu();
    }

    private static void primaryMenu() {
        while (true) {
            System.out.println("=========欢迎来到沫林信息管理系统=========");
            System.out.println("1.学生管理 2.老师管理 3.退出");
            System.out.print("请输入： ");
            Scanner sc = new Scanner(System.in);
            int choose = sc.nextInt();
            switch (choose) {
                case 1:
//                    System.out.println("进入学生管理系统...");
//                    v1.0不对学生id进行验证。
//                    OldStudentController studentController=new OldStudentController();
//                    v2.0 对学生id进行验证，使用静态类，静态方法完成模板设计模式，且满足开闭原则。
                    StudentController studentController = new StudentController();
                    studentController.start();
                    break;
                case 2:
                    System.out.println("进入老师管理系统...");
                    break;
                case 3:
                    System.out.println("退出系统");
                    System.exit(0);
                default:
                    System.out.println("输入错误，请重新操作！");
            }
        }
    }
}

/* 代码设计六大原则
 单一职责

一个类或者一个接口，最好只负责一项职责。

开闭原则

一个软件实体如类、模版和函数应该对扩展，对修改关闭；

里氏替换原则

子类可以实现父类的抽象方法，但不能覆盖父类的非抽象方法；
* 子类可以增加自己特有的方法；
* 当子类的方法重载父类的方法时，方法的形参要比父类方法的输入参数更佳宽松；
* 当子类的方法实现父类的抽象方法时，方法的返回值要比父类更加严格；

依赖倒置原则

 低层模块尽量都要有抽象类或者接口，或者两者都有；
* 变量的声明类型尽量是抽象类或者接口；
* 使用继承时遵循里氏替换原则；
       理解依赖倒置：
        - 高层模块不应该依赖低层模块，两者都应该依赖抽象
        - 抽象不应该依赖细节
        - 细节应该依赖抽象

接口隔离原则

* 一个接口只服务于一个子模块或业务逻辑，服务定制；
* 通过业务逻辑压缩接口中的public方法，让接口看起来更加精悍；
* 已经被污染了的接口，尽量修改，如果变更风险太大，则用适配器模式进行转化；
* 根据具体的业务，深入了解逻辑，用心感知去控制设计思路；

迪米特原则

定义：一个对象应该对其他对象保持最少的了解，其核心精神就是：
不和陌生人说话，通俗之意就是一个对象对自己需要耦合关联调用的类应该知道的少；
这会导致类之间的耦合度降低，每个类都尽量减少对其他类的依赖。
* */